<?php
    class MysqlBackupComponent {

        var $strBackup;
        
        /* backup the db OR just a table */
        function backup_tables($host,$user,$pass,$name,$tables = '*')
        {

          $link = mysql_connect($host,$user,$pass);
          mysql_select_db($name,$link);

          //get all of the tables
          if($tables == '*')
          {
            $tables = array();
            $result = mysql_query('SHOW TABLES');
            while($row = mysql_fetch_row($result))
            {
              $tables[] = $row[0];
            }
          }
          else
          {
            $tables = is_array($tables) ? $tables : explode(',',$tables);
          }

          $return = 'SET FOREIGN_KEY_CHECKS=0;
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT=0;
START TRANSACTION;';

          //cycle through
          foreach($tables as $table)
          {
              if($table != "backups"){
                $result = mysql_query('SELECT * FROM '.$table);
                $num_fields = mysql_num_fields($result);

                //$return.= 'DROP TABLE '.$table.';';
                $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
                $return.= "\n\n".$row2[1].";\n\n";

                for ($i = 0; $i < $num_fields; $i++)
                {
                  while($row = mysql_fetch_row($result))
                  {
                    $return.= 'INSERT INTO '.$table.' VALUES(';
                    for($j=0; $j<$num_fields; $j++)
                    {
                      $row[$j] = addslashes($row[$j]);
                      $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                      if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                      if ($j<($num_fields-1)) { $return.= ','; }
                    }
                    $return.= ");\n";
                  }
                }
                $return.="\n\n\n";
              }
          }

          $return .= 'SET FOREIGN_KEY_CHECKS=1;
            COMMIT;';

          $this->strBackup = $return;

          return $return;
        }

        function save(){
            //save file
              $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
              fwrite($handle,$this->strBackup);
              fclose($handle);
        }
    }
?>
